package com.wjl.partnerMatching.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.wjl.partnerMatching.common.ErrorCode;
import com.wjl.partnerMatching.domain.User;
import com.wjl.partnerMatching.exception.BusinessException;
import com.wjl.partnerMatching.service.UserService;
import com.wjl.partnerMatching.mapper.UserMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author wjl
 * @description 针对表【user(用户表)】的数据库操作Service实现
 * @createDate 2025-06-02 20:17:46
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 根据标签搜索用户（直接通过 SQL 进行数据筛选）
     *
     * @param tagNameList 标签列表
     * @return
     */
    @Override
    public List<User> searchUserByTags(List<String> tagNameList) {
        if (CollectionUtils.isEmpty(tagNameList)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        for (String tagName : tagNameList) {
            queryWrapper = queryWrapper.like("tags", tagName);
        }

        List<User> userList = userMapper.selectList(queryWrapper);
        // 对用户信息进行脱敏处理
        // userList.stream().map(user -> getSafetyUser(user)).collect(Collectors.toList());
        // userList.forEach(user -> getSafetyUser(user));
        // 对用户信息进行脱敏处理
        return userList.stream().map(this::getSafetyUser).collect(Collectors.toList());
    }


    /**
     * 根据标签搜索用户（先通过 SQL 获取所有数据，然后在内存中进行数据筛选）
     *
     * @param tagNameList 标签列表
     * @return
     */
    @Override
    public List<User> searchUserByTags2(List<String> tagNameList) {
        if (CollectionUtils.isEmpty(tagNameList)) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }

        // 1.先获取所有数据
        List<User> userList = userMapper.selectList(null);
        // 2.在内存中筛选数据
        Gson gson = new Gson();
        return userList.stream().filter(user -> {
            String tagsStr = user.getTags();
            if (StringUtils.isBlank(tagsStr)) {
                return false;
            }
            Set<String> tagNameSet = gson.fromJson(tagsStr, new TypeToken<Set<String>>() {
            }.getType());
            for (String tagName : tagNameSet) {
                if (!tagNameSet.contains(tagName)) {
                    return false;
                }
            }
            return true;
        }).map(this::getSafetyUser).collect(Collectors.toList());
    }


    /**
     * 对用户信息进行脱敏处理
     *
     * @param user 用户信息
     */
    private User getSafetyUser(User user) {
        return user;
    }
}




